// pages/membership-register/membership-register.ts
import { goBack } from '../../../config/pages';
import { memberCardCreate } from '../../../api/user.js';
import { getUserInfo, isPaidMember } from '../../../utils/userManager.js';
import { MEMBERSHIP_PRICE } from '../../../config/app.js';

Page({
  data: {
    // 页面数据
    isPaidMember: false, // 是否为付费会员
    buttonText: '立即开通', // 按钮文字
    buttonDisabled: false // 按钮是否禁用
  },

  onLoad() {
    console.log('会员注册页面加载完成');
    this.checkMemberStatus();
  },

  onShow() {
    console.log('会员注册页面显示');
    // 页面显示时重新检查会员状态
    this.checkMemberStatus();
  },

  // 检查会员状态并更新按钮状态
  checkMemberStatus() {
    const isPaid = isPaidMember();
    this.setData({
      isPaidMember: isPaid,
      buttonText: isPaid ? '已成为会员' : '立即开通',
      buttonDisabled: isPaid
    });
  },

  // 返回上一页
  goBack() {
    goBack();
  },

  // 支付开通会员
  payMembership() {
    // 如果已经是付费会员，直接返回
    if (this.data.isPaidMember) {
      wx.showToast({
        title: '您已是付费会员',
        icon: 'none'
      });
      return;
    }

    wx.showModal({
      title: '开通会员',
      content: '确认支付¥365元开通会员吗？',
      confirmText: '确认支付',
      success: (res) => {
        if (res.confirm) {
          this.createMemberCard();
        }
      }
    });
  },

  // 创建会员卡订单
  createMemberCard() {
    wx.showLoading({
      title: '创建订单中...'
    });


    // 构建请求参数，参考 index.vue 的参数结构
    const query = {
      pay_type: 'weixin', // 支付类型：微信支付
      type: '1', // 会员类型
      from: 'routine', // 小程序来源
      member_type: 'year', // 会员类型
      mc_id: 3, // 会员卡ID
      price: MEMBERSHIP_PRICE, // 实际支付价格（根据环境自动调整）
      money: MEMBERSHIP_PRICE // 原价（根据环境自动调整）
    };

    memberCardCreate(query)
      .then((res: any) => {
        wx.hideLoading();
        console.log(res)

        // if (res.status==200){
        //   this.verifyPaymentStatus();
        // }else {
        //   wx.showToast({
        //     title: '创建订单失败',
        //     icon: 'none'
        //   });
        // }

        if (res.data && res.data.result) {
          // 调用微信支付
          this.callWechatPay(res.data);
        } else {
          wx.showToast({
            title: '创建订单失败',
            icon: 'none'
          });
        }
      })
      .catch((err: any) => {
        wx.hideLoading();
        wx.showToast({
          title: err.message || '创建订单失败',
          icon: 'none'
        });
      });
  },

  // 调用微信支付
  callWechatPay(data: any) {
    const { status, result } = data;
    const { jsConfig } = result;

    if (status === 'WECHAT_PAY' && jsConfig) {
      wx.showLoading({
        title: '调起支付中...'
      });

      // 调用微信支付
      wx.requestPayment({
        timeStamp: jsConfig.timestamp,
        nonceStr: jsConfig.nonceStr,
        package: jsConfig.package,
        signType: jsConfig.signType,
        paySign: jsConfig.paySign,
        success: () => {
          wx.hideLoading();
          // 支付成功后验证支付状态
          this.verifyPaymentStatus();
        },
        fail: (err) => {
          console.log(err);
          wx.hideLoading();
          if (err.errMsg === 'requestPayment:cancel') {
            wx.showToast({
              title: '取消支付',
              icon: 'none'
            });
          } else {
            wx.showToast({
              title: '支付失败',
              icon: 'none'
            });
          }
        }
      });
    } else {
      wx.showToast({
        title: '支付配置错误',
        icon: 'none'
      });
    }
  },

  // 验证支付状态
  verifyPaymentStatus() {
    wx.showLoading({
      title: '验证支付状态...'
    });

    // 开始多次检测支付状态
    this.checkMemberStatusWithRetry(0);
  },

  // 多次重试检测会员状态
  async checkMemberStatusWithRetry(retryCount: number) {
    const maxRetries = 5; // 最大重试次数
    const retryInterval = 2000; // 重试间隔：2秒

    try {
      // 强制刷新用户信息，验证支付状态
      const userInfo = await getUserInfo(true, false);
      
      if (userInfo && (userInfo as any).vip_status === 3) {
        // vip_status 为 3 表示付费会员且未过期，支付成功
        wx.hideLoading();
        wx.showToast({
          title: '支付成功，会员已开通',
          icon: 'success',
          duration: 2000
        });
        
        // 更新页面状态
        this.setData({
          isPaidMember: true,
          buttonText: '已成为会员',
          buttonDisabled: true
        });
        
        // 延迟返回
        setTimeout(() => {
          goBack();
        }, 2000);
        return;
      }

      // 如果还没生效，继续重试
      if (retryCount < maxRetries) {
        console.log(`[支付验证] 第${retryCount + 1}次检测，会员状态未生效，${retryInterval/1000}秒后重试...`);
        
        setTimeout(() => {
          this.checkMemberStatusWithRetry(retryCount + 1);
        }, retryInterval);
      } else {
        // 达到最大重试次数，提示用户稍后查看
        wx.hideLoading();
        wx.showToast({
          title: '支付成功，请稍后查看会员状态',
          icon: 'none',
          duration: 3000
        });
        
        // 延迟返回
        setTimeout(() => {
          goBack();
        }, 3000);
      }
    } catch (error) {
      console.error(`[支付验证] 第${retryCount + 1}次检测失败:`, error);
      
      // 如果还有重试机会，继续重试
      if (retryCount < maxRetries) {
        setTimeout(() => {
          this.checkMemberStatusWithRetry(retryCount + 1);
        }, retryInterval);
      } else {
        // 达到最大重试次数，提示用户稍后查看
        wx.hideLoading();
        wx.showToast({
          title: '支付成功，请稍后查看会员状态',
          icon: 'none',
          duration: 3000
        });
        
        // 延迟返回
        setTimeout(() => {
          goBack();
        }, 3000);
      }
    }
  },

  // 检查会员状态（支付验证用）
  async checkMemberStatusForPayment() {
    try {
      // 强制刷新用户信息，验证支付状态
      const userInfo = await getUserInfo(true, false);
      
      wx.hideLoading();
      
      if (userInfo && (userInfo as any).vip_status === 3) {
        // vip_status 为 3 表示付费会员且未过期，支付成功
        wx.showToast({
          title: '支付成功，会员已开通',
          icon: 'success',
          duration: 2000
        });
        
        // 延迟返回
        setTimeout(() => {
          goBack();
        }, 2000);
      } else {
        // 支付可能还未生效，提示用户稍后查看
        wx.showToast({
          title: '支付成功，请稍后查看会员状态',
          icon: 'none',
          duration: 3000
        });
        
        // 延迟返回
        setTimeout(() => {
          goBack();
        }, 3000);
      }
    } catch (error) {
      wx.hideLoading();
      console.error('验证会员状态失败:', error);
      
      // 验证失败，但支付可能已成功，提示用户稍后查看
      wx.showToast({
        title: '支付成功，请稍后查看会员状态',
        icon: 'none',
        duration: 3000
      });
      
      // 延迟返回
      setTimeout(() => {
        goBack();
      }, 3000);
    }
  }
});

